Cache sharing among branch proxy servers via a master proxy server at a data center

ABSTRACT

A method, system and computer program product for cache sharing among branch proxy servers. A branch proxy sever receives a request for accessing a resource at a data center. The branch proxy server creates a cache entry in its cache to store the requested resource if the branch proxy server does not store the requested resource. Upon creating the cache entry, the branch proxy server sends the cache entry to a master proxy server at the data center to transfer ownership of the cache entry if the master proxy server did not store the resource in its cache. When the resource becomes invalid or expired, the master proxy server informs the appropriate branch proxy servers storing the resource to purge the cache entry containing this resource. In this manner, the master proxy server ensures that the cached resource is synchronized across the branch proxy servers storing this resource.

TECHNICAL FIELD

The present invention relates to data network configurations in businessenvironments, and more particularly to cache sharing among branch proxyservers in branch offices via a master proxy server at a data center.

BACKGROUND

A data network configuration implemented in business environmentstypically involves centralizing data storage at a data center andproviding this data (e.g., via a server at the data center) to aplurality of client computing devices over a wide area network (e.g.,Internet). These client computing devices (“clients”) may be located at“branch offices” of the company, such as in the retail, banking, andairline industry. In each branch office, client computing devices may beinterconnected to each other using a local area network (LAN).Applications running on the client devices may require data from thedata center, such as records, files, merchandising data, etc. However,the interconnection between the branch office and the data center istypically via a low bandwidth connection. Since these applications mayrequire large amount of data, the slow connection leads to poorapplication performance.

As a result, companies may increase the bandwidth of the interconnectionbetween the branch office and the data center. However, increasing thebandwidth of the interconnection is costly.

Alternatively, companies may add a proxy server at each branch office toserve as an intermediary for requests from clients seeking resources(e.g., file, merchandising data) from other servers at the data center.Once the proxy server has serviced the client's request, it may cachethe resource for future requests for the resource. In this manner, whena client requests that resource, the proxy server may directly providethat resource instead of obtaining the resource from the data center.While this improves the performance of the branch application, eachbranch proxy server is independent of one another. That is, each branchproxy server is independent of the other branch proxy servers at theother branch offices. As a result, one branch proxy server may store alater version of the resource than another branch proxy server. A branchproxy server may even be storing an expired or invalid resource;whereas, another branch proxy server is storing a valid version of thesame resource.

BRIEF SUMMARY

In one embodiment of the present invention, a method for cache sharingamong branch proxy servers comprises receiving a request by a firstproxy server in a branch office to access a resource at a data center.The method further comprises transmitting a request to a second proxyserver at the data center to determine if the resource is located in acache of the second proxy server in response to the first proxy servernot storing the resource in its cache. Additionally, the methodcomprises creating a cache entry in the cache of the first proxy serverto store the resource in response to the second proxy server not storingthe resource in its cache. In addition, the method comprises sending thecache entry to the second proxy server to transfer ownership of thecache entry to the second proxy server.

The foregoing has outlined rather generally the features and technicaladvantages of one or more embodiments of the present invention in orderthat the detailed description of the present invention that follows maybe better understood. Additional features and advantages of the presentinvention will be described hereinafter which may form the subject ofthe claims of the present invention.

BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWINGS

A better understanding of the present invention can be obtained when thefollowing detailed description is considered in conjunction with thefollowing drawings, in which:

FIG. 1 illustrates a business computing environment in accordance withan embodiment of the present invention;

FIG. 2 is a hardware configuration of a branch proxy server and a masterproxy server in accordance with an embodiment of the present invention;

FIG. 3 is a flowchart of a method for cache sharing among branch proxyservers in accordance with an embodiment of the present invention;

FIG. 4 is a diagram illustrating cache sharing among branch proxyservers in accordance with an embodiment of the present invention; and

FIG. 5 is a flowchart of a method for synchronizing cache data amongbranch proxy servers in accordance with an embodiment of the presentinvention.

DETAILED DESCRIPTION

The present invention comprises a method, system and computer programproduct for cache sharing among branch proxy servers. In one embodimentof the present invention, a branch proxy sever receives a request from aclient in its branch office for accessing a resource at a data center.The branch proxy server transmits a request to a master proxy server atthe data center to determine if the resource is located in its cache ifthe branch proxy server does not store the requested resource in itscache. The branch proxy server creates a cache entry in its cache tostore the requested resource. Upon creating the cache entry, the branchproxy server sends the cache entry to the master proxy server totransfer ownership of the cache entry if the master proxy server did notstore the resource in its cache. When the resource becomes invalid orexpired, the master proxy server informs the appropriate branch proxyservers storing the resource to purge the cache entry containing thisresource. The master proxy server may provide an updated version of theresource to be stored in place of the prior version thereby ensuringthat all of the branch proxy servers storing this resource are storingthe correct version. In this manner, the master proxy server ensuresthat the cached resource is synchronized across the branch proxy serversstoring this resource thereby preventing the branch proxy servers fromstoring different versions or even invalid or expired versions of theresource.

While the following discusses the present invention in connection with acomputing environment for business organizations with branch offices(e.g., banking, airline and retail industries), the principles of thepresent invention may be applied to other environments where cacheentries need to be synchronized among proxy servers. A person ofordinary skill in the art would be capable of applying the principles ofthe present invention to such implementations. Further, embodimentsapplying the principles of the present invention to such implementationswould fall within the scope of the present invention.

In the following description, numerous specific details are set forth toprovide a thorough understanding of the present invention. However, itwill be apparent to those skilled in the art that the present inventionmay be practiced without such specific details. In other instances,well-known circuits have been shown in block diagram form in order notto obscure the present invention in unnecessary detail. For the mostpart, details considering timing considerations and the like have beenomitted inasmuch as such details are not necessary to obtain a completeunderstanding of the present invention and are within the skills ofpersons of ordinary skill in the relevant art.

Referring now to the Figures in detail, FIG. 1 illustrates a suitablebusiness computing environment 100 for practicing the principles of thepresent invention in accordance with an embodiment of the presentinvention. Computing environment 100 includes one or more branch offices101A-101B. Branch offices 101A-101B may collectively or individually bereferred to as branch offices 101 or branch office 101, respectively.Each branch office 101 includes one or more client computing devices“clients.” For example, branch office 101A includes clients 102A-102Cand branch office 101B includes clients 102D-102F. Clients 102A-102F maycollectively or individually be referred to as clients 102 or client102, respectively.

As further illustrated in FIG. 1, each branch office 101 may alsoinclude a branch proxy server connected to a client 102 via a local areanetwork. For example, branch office 101A includes branch proxy server103A that is connected to clients 102A-102C via local area network(“LAN”) 104A. Similarly, branch office 101B includes branch proxy server103B that is connected to clients 102D-102F via local area network 104B.Branch proxy servers 103A-103B may collectively or individually bereferred to as branch proxy servers 103 or branch proxy server 103,respectively. A detailed description of the hardware configuration ofbranch proxy server 103 is provided further below in connection withFIG. 2. Furthermore, local area networks 104A-104B may collectively orindividually be referred to as local area networks 104 or local areanetwork 104, respectively.

Computing environment 100 further includes a data center 105 which isinterconnected to branch offices 101 via a wide area network (“WAN”)106, such as the Internet. Data center 105 includes a master proxyserver 107 and a sever 108 for providing the resources requested byclients 102. Master proxy server 107 is interconnected between wide areanetwork 106 and server 108. A detailed description of the hardwareconfiguration of master proxy server 107 is provided further below inconnection with FIG. 2.

In one embodiment, branch proxy server 103 serves as an intermediary forrequests from clients 102 seeking resources (e.g., file, merchandisingdata) from server 108 at data center 105. Similarly, master proxy server107 servers as an intermediary for requests from branch proxy server 103and server 108 at data center 105. Master proxy server 107 is configuredto synchronize cache data among branch proxy servers 103 as discussedbelow in further detail.

Computing environment 100 is not to be limited in scope to any oneparticular computer architecture. Computing environment 100 may includeany number of branch offices 101, where each branch office 101 mayinclude any number of clients 102 interconnected with a branch proxyserver 103 via a local area network 104. Furthermore, data center 105may include any number of servers 108 providing resources requested byclients 102.

Referring to FIG. 2, FIG. 2 illustrates an embodiment of a branch proxyserver 103 (FIG. 1), master proxy server 107 (FIG. 1) which isrepresentative of a hardware environment for practicing the presentinvention. Proxy servers 103, 107 may have a processor 201 coupled tovarious other components by system bus 202. An operating system 203 mayrun on processor 201 and provide control and coordinate the functions ofthe various components of FIG. 2. An application 204 in accordance withthe principles of the present invention may run in conjunction withoperating system 203 and provide calls to operating system 203 where thecalls implement the various functions or services to be performed byapplication 204. Application 204 for branch proxy server 103 mayinclude, for example, an application for cache sharing among branchproxy servers 103 as discussed further below in association with FIGS.3-4. Application 204 for master proxy server 107 may include, forexample, an application for synchronizing cache data among branch proxyservers 103 as discussed further below in association with FIGS. 4-5.

Referring again to FIG. 2, read-only memory (“ROM”) 205 may be coupledto system bus 202 and include a basic input/output system (“BIOS”) thatcontrols certain basic functions of proxy servers 103, 107. Randomaccess memory (“RAM”) 206 and disk adapter 207 may also be coupled tosystem bus 202. It should be noted that software components includingoperating system 203 and application 204 may be loaded into RAM 206,which may be proxy servers 103, 107 main memory for execution. Diskadapter 207 may be an integrated drive electronics (“IDE”) adapter thatcommunicates with a disk unit 208, e.g., disk drive. It is noted thatthe program for cache sharing among branch proxy servers 103 and forsynchronizing cache data among branch proxy servers 103 as discussedfurther below in association with FIGS. 3-5, may reside in disk unit 208or in application 204.

Proxy servers 103, 107 may further include a communications adapter 209coupled to bus 202. Referring to FIG. 2, in conjunction with FIG. 1,communications adapter 209 of proxy server 103 may interconnect bus 202with an outside network (not shown) thereby allowing proxy server 103 tocommunicate with data center 105 (e.g., master proxy server 107) andclients 102. Communications adaptor 209 of proxy server 107 mayinterconnect bus 202 with an outside network (not shown) therebyallowing proxy server 107 to communicate with server 108 as well as withbranch proxy server 103.

Additionally, proxy servers 103, 107 may include a cache 210, such as alevel-1 cache, to store resources as discussed further below inconnection with FIGS. 3-5. While cache 210 is shown to be internalwithin processor 201, cache 210 may be located external to processor.Cache 210 may be any type of cache (e.g., physically indexed, physicallytagged; virtually indexed, virtually tagged; virtually indexed,physically tagged).

As will be appreciated by one skilled in the art, aspects of the presentinvention may be embodied as a system, method or computer programproduct. Accordingly, aspects of the present invention may take the formof an entirely hardware embodiment, an entirely software embodiment(including firmware, resident software, micro-code, etc.) or anembodiment combining software and hardware aspects that may allgenerally be referred to herein as a “circuit,” ‘module” or “system.”Furthermore, aspects of the present invention may take the form of acomputer program product embodied in one or more computer readablemedium(s) having computer readable program code embodied thereon.

Any combination of one or more computer readable medium(s) may beutilized. The computer readable medium may be a computer readable signalmedium or a computer readable storage medium. A computer readablestorage medium may be, for example, but not limited to, an electronic,magnetic, optical, electromagnetic, infrared, or semiconductor system,apparatus, or device, or any suitable combination of the foregoing. Morespecific examples (a non-exhaustive list) of the computer readablestorage medium would include the following: an electrical connectionhaving one or more wires, a portable computer diskette, a hard disk, arandom access memory (RAM), a read-only memory (ROM), an erasableprogrammable read-only memory (EPROM or flash memory), a portablecompact disc read-only memory (CD-ROM), an optical storage device, amagnetic storage device, or any suitable combination of the foregoing.In the context of this document, a computer readable storage medium maybe any tangible medium that can contain, or store a program for use byor in connection with an instruction execution system, apparatus, ordevice.

A computer readable signal medium may include a propagated data signalwith computer readable program code embodied therein, for example, inbaseband or as part of a carrier wave. Such a propagated signal may takeany of a variety of forms, including, but not limited to,electro-magnetic, optical, or any suitable combination thereof Acomputer readable signal medium may be any computer readable medium thatis not a computer readable storage medium and that can communicate,propagate, or transport a program for use by or in connection with aninstruction execution system, apparatus or device.

Program code embodied on a computer readable medium may be transmittedusing any appropriate medium, including but not limited to wireless,wireline, optical fiber cable, RF, etc., or any suitable combination ofthe foregoing.

Computer program code for carrying out operations for aspects of thepresent invention may be written in any combination of one or moreprogramming languages, including an object oriented programming languagesuch as Java, Smalltalk, C++ or the like and conventional proceduralprogramming languages, such as the C programming language or similarprogramming languages. The program code may execute entirely on theuser's computer, partly on the user's computer, as a stand-alonesoftware package, partly on the user's computer and partly on a remotecomputer or entirely on the remote computer or server. In the latterscenario, the remote computer may be connected to the user's computerthrough any type of network, including a local area network (LAN) or awide area network (WAN), or the connection may be made to an externalcomputer (for example, through the Internet using an Internet ServiceProvider).

Aspects of the present invention are described below with reference toflowchart illustrations and/or block diagrams of methods, apparatus(systems) and computer program products according to embodiments of thepresent invention. It will be understood that each block of theflowchart illustrations and/or block diagrams, and combinations ofblocks in the flowchart illustrations and/or block diagrams, can beimplemented by computer program instructions. These computer programinstructions may be provided to a processor of a general purposecomputer, special purpose computer, or other programmable dataprocessing apparatus to product a machine, such that the instructions,which execute via the processor of the computer or other programmabledata processing apparatus, create means for implementing thefunction/acts specified in the flowchart and/or block diagram block orblocks.

These computer program instructions may also be stored in a computerreadable medium that can direct a computer, other programmable dataprocessing apparatus, or other devices to function in a particularmanner, such that the instructions stored in the computer readablemedium produce an article of manufacture including instructions whichimplement the function/act specified in the flowchart and/or blockdiagram block or blocks.

The computer program instructions may also be loaded onto a computer,other programmable data processing apparatus, or other devices to causea series of operational steps to be performed on the computer, otherprogrammable apparatus or other devices to produce a computerimplemented process such that the instructions which execute on thecomputer or other programmable apparatus provide processes forimplementing the function/acts specified in the flowchart and/or blockdiagram block or blocks.

As stated in the Background section, companies may add a proxy server ateach branch office to serve as an intermediary for requests from clientsseeking resources (e.g., file, merchandising data) from other servers atthe data center. Once the proxy server has serviced the client'srequest, it may cache the resource for future requests for the resource.In this manner, when a client requests that resource, the proxy servermay directly provide that resource instead of obtaining the resourcefrom the data center. While this improves the performance of the branchapplication, each branch proxy server is independent of one another.That is, each branch proxy server is independent of the other branchproxy servers at the other branch offices. As a result, one branch proxyserver may store a later version of the resource than another branchproxy server. A branch proxy server may even be storing an expired orinvalid resource; whereas, another branch proxy server is storing avalid version of the same resource.

The principles of the present invention enable the cached resources tobe synchronized across the branch proxy servers thereby ensuring thatthe client branch applications obtain the correct data while improvingthe performance of the client branch applications as discussed below inconnection with FIGS. 3-5. FIG. 3 is a flowchart of a method for cachesharing among branch proxy servers 103 (FIG. 1). FIG. 4 is a diagramillustrating cache sharing among branch proxy servers 103. FIG. 5 is aflowchart of a method for synchronizing cache data among branch proxyservers 103.

Referring to FIG. 3, FIG. 3 is a flowchart of a method 300 for cachesharing among branch proxy servers 103 (FIG. 3) in accordance with anembodiment of the present invention.

Method 300 will be discussed in conjunction with FIG. 4, which is adiagram illustrating cache sharing among branch proxy servers 103 aswell as illustrating the synchronization of cache data among branchproxy servers 103 in accordance with an embodiment of the presentinvention.

Referring again to FIG. 3, in conjunction with FIGS. 1-2 and 4, in step301, branch proxy server 103 receives a request from client 102 toaccess a resource from data center 105 (e.g., server 108).

In step 302, a determination is made by branch proxy server 103 as towhether the requested resource is stored in its local cache 210.

If the requested resource is stored in its local cache 210, then, instep 303, branch proxy sever 103 accesses the resource and sends it tothe requesting client 102.

If, however, the requested resource is not stored in its local cache210, then, in step 304, branch proxy server 103 transmits a request tomaster proxy server 107 to determine if the resource is located in itslocal cache 210. As illustrated in FIG. 4, a business may have multiplebranch proxy servers 103 (e.g., branch proxy server 103A, branch proxyserver 103B) in various locations that are connected to master proxyserver 107 at a data center 105. One of the branch proxy servers 103(e.g., branch proxy server 103A) may request master proxy server 107 forthe requested cached resource (in the example illustrated in FIG. 4, therequested resource is identified by “/foo”) as identified by step 401 ifthe branch proxy server 103A does not store the requested resourcelocally in its cache 210.

Returning to FIG. 3, in conjunction with FIGS. 1-2 and 4, in step 305,branch proxy server 103 receives the response from master proxy sever107 as to whether master proxy server 107 has the requested resource inits local cache 210. A determination is made by branch proxy server 103in step 306 as to whether master proxy server 107 has the requestedresource cached.

If master proxy server 107 has the requested resource cached, then, instep 307, branch proxy server 103 receives the requested resource frommaster proxy server 107 and caches it in its local cache 210 for futureclient requests.

If, however, master proxy server 107 does not have the requestedresource cached, as illustrated in step 402 in FIG. 4, then, in step308, branch proxy server 103 fetches the requested resource from datacenter 105 (e.g., server 108). Alternatively, branch proxy server 103may request master proxy server 107 to fetch the requested resource fromdata center 105 (e.g., server 108) on its behalf.

In step 309, branch proxy server 103 creates a cache entry in its localcache 210 to store the fetched resource. Referring to FIG. 4, uponmaster proxy server 107 informing branch proxy server 103A that therequested resource is not cached in its local cache 210, branch proxyserver 103A creates a cache entry in its local cache 210 and caches therequested resource in step 404.

Returning to FIG. 3, in conjunction with FIGS. 1-2 and 4, in step 310,branch proxy server 103 sends the cache entry created in step 309 thatstores the requested resource to master proxy server 107 to transferownership of the cache entry to master proxy server 107 as illustratedin step 404 of FIG. 4.

Once master proxy server 107 acquires ownership of the cache entry thatstores the requested resource, which involves caching the resource inits local cache 210 as discussed further below in connection with FIG.5, master proxy server 107 will be able to provide the resource upon itbeing requested by other branch proxy servers 103. For example, asillustrated in FIG. 4, branch proxy server 103B may request for theresource identified in FIG. 4 as “/foo” in step 405 after master proxyserver 107 has taken ownership of the cache entry for the resource“/foo” in step 404.

Upon receiving the request for the resource “/foo,” master proxy server107 sends the requested resource to branch proxy server 103A in step406. Branch proxy server 103A then caches the resource in its localcache 210 in step 407 (similarly discussed in step 307 of FIG. 3).

In some implementations, method 300 may include other and/or additionalsteps that, for clarity, are not depicted. Further, in someimplementations, method 300 may be executed in a different orderpresented and that the order presented in the discussion of FIGS. 3 and4 is illustrative. Additionally, in some implementations, certain stepsin method 300 may be executed in a substantially simultaneous manner ormay be omitted.

As discussed above, ownership of the cache entry created by branch proxyserver 103 is transferred to master proxy server 107 in step 310 of FIG.3. Once master proxy server 107 has ownership of the cache entry for theresource, master proxy server 107 ensures that the cached resource issynchronized across branch proxy servers 103 in various branch offices101 using the process described in FIG. 5. That is, master proxy server107 ensures that the resource that is cached in multiple branch proxyservers 103 are all the same version and up-to-date using the processdescribed in FIG. 5.

FIG. 5 is a flowchart of a method 500 for synchronizing cache data amongbranch proxy servers 103 (FIG. 1) in accordance with an embodiment ofthe present invention.

Referring to FIG. 5, in conjunction with FIGS. 1-4, in step 501, masterproxy server 107 receives the cache entry that branch proxy server 103created in step 309 that stores the resource requested by client 102 inorder to transfer ownership of the cache entry to master proxy server107.

In step 502, master proxy server 107 stores the received cache entry inits local cache 210.

In step 503, a determination is made by master proxy server 107 as towhether the resource at the cache entry is invalid or expired.

If the resource at the cache entry is valid and not expired, then masterproxy server 107 repeats the determination step of 503 after a durationof time.

If, however, the resource at the cache entry is invalid or expired,then, in step 504, master proxy server 107 informs the appropriatebranch proxy servers 103 (those branch proxy servers 103 storing thiscached resource) to purge the cache entry containing the resource.Master proxy server 107 may provide an updated version of the resourceto be stored in place of the prior version thereby ensuring that all ofthe branch proxy servers 103 storing this resource are storing thecorrect version. In this manner, master proxy server 107 ensures thatthe cached resource is synchronized across branch proxy servers 103storing this resource thereby preventing branch proxy servers 103 fromstoring different versions or even invalid or expired versions of theresource.

An illustration of step 504 is provided in FIG. 4. Referring to FIG. 4,if branch proxy servers 103A, 103B both have cached the resource “/foo”which needs to be purged for being invalid or expired, then master proxyserver 107 informs branch proxy servers 103 A, 103B in steps 408, 409,respectively, to purge the cache entry “/foo” which can be replaced withan updated version of the resource “/foo.”

In some implementations, method 500 may include other and/or additionalsteps that, for clarity, are not depicted. Further, in someimplementations, method 500 may be executed in a different orderpresented and that the order presented in the discussion of FIGS. 4 and5 is illustrative. Additionally, in some implementations, certain stepsin method 500 may be executed in a substantially simultaneous manner ormay be omitted.

Although the method, system and computer program product are describedin connection with several embodiments, it is not intended to be limitedto the specific forms set forth herein, but on the contrary, it isintended to cover such alternatives, modifications and equivalents, ascan be reasonably included within the spirit and scope of the inventionas defined by the appended claims.

1. A method for cache sharing among branch proxy servers, the methodcomprising: receiving a request by a first proxy server in a branchoffice to access a resource at a data center; transmitting a request toa second proxy server at said data center to determine if said resourceis located in a cache of said second proxy server in response to saidfirst proxy server not storing said resource in its cache; creating acache entry in said cache of said first proxy server to store saidresource in response to said second proxy server not storing saidresource in its cache; and sending said cache entry to said second proxyserver to transfer ownership of said cache entry to said second proxyserver.
 2. The method as recited in claim 1 further comprising: fetchingsaid resource by said first proxy server in response to said secondproxy server not storing said resource in its cache.
 3. The method asrecited in claim 1 further comprising: receiving said resource by saidfirst proxy server from said second proxy server in response to saidsecond proxy server storing said resource in its cache.
 4. The method asrecited in claim 1 further comprising: receiving said cache entry bysaid second proxy server from said first proxy server; and storing saidcache entry in said cache of said second proxy server.
 5. The method asrecited in claim 4 further comprising: informing said first proxy serverto purge said cache entry in response to said resource at said cacheentry being one of invalid and expired.
 6. The method as recited inclaim 4 further comprising: informing one or more proxy servers at oneor more branch offices to purge a cache entry storing said resource inresponse to said resource at said cache entry being one of invalid andexpired.
 7. A computer program product embodied in a computer readablestorage medium for cache sharing among branch proxy servers, thecomputer program product comprising the programming instructions for:receiving a request by a first proxy server in a branch office to accessa resource at a data center; transmitting a request to a second proxyserver at said data center to determine if said resource is located in acache of said second proxy server in response to said first proxy servernot storing said resource in its cache; creating a cache entry in saidcache of said first proxy server to store said resource in response tosaid second proxy server not storing said resource in its cache; andsending said cache entry to said second proxy server to transferownership of said cache entry to said second proxy server.
 8. Thecomputer program product as recited in claim 7 further comprising theprogramming instructions for: fetching said resource by said first proxyserver in response to said second proxy server not storing said resourcein its cache.
 9. The computer program product as recited in claim 7further comprising the programming instructions for: receiving saidresource by said first proxy server from said second proxy server inresponse to said second proxy server storing said resource in its cache.10. The computer program product as recited in claim 7 furthercomprising the programming instructions for: receiving said cache entryby said second proxy server from said first proxy server; and storingsaid cache entry in said cache of said second proxy server.
 11. Thecomputer program product as recited in claim 10 further comprising theprogramming instructions for: informing said first proxy server to purgesaid cache entry in response to said resource at said cache entry beingone of invalid and expired.
 12. The computer program product as recitedin claim 10 further comprising the programming instructions for:informing one or more proxy servers at one or more branch offices topurge a cache entry storing said resource in response to said resourceat said cache entry being one of invalid and expired.
 13. A system,comprising: a first proxy server in a branch office connected to a datacenter, wherein said first proxy server comprises: a memory unit forstoring a computer program for cache sharing among branch proxy servers;and a processor coupled to said memory unit, wherein said processor,responsive to said computer program, comprises circuitry for receiving arequest to access a resource at said data center; circuitry fortransmitting a request to a second proxy server at said data center todetermine if said resource is located in a cache of said second proxyserver in response to said first proxy server not storing said resourcein its cache; circuitry for creating a cache entry in said cache of saidfirst proxy server to store said resource in response to said secondproxy server not storing said resource in its cache; and circuitry forsending said cache entry to said second proxy server to transferownership of said cache entry to said second proxy server.
 14. Thesystem as recited in claim 13, wherein said processor of said firstproxy server further comprises: circuitry for fetching said resource inresponse to said second proxy server not storing said resource in itscache.
 15. The system as recited in claim 13, wherein said processor ofsaid first proxy server further comprises: circuitry for receiving saidresource from said second proxy server in response to said second proxyserver storing said resource in its cache.
 16. The system as recited inclaim 13 further comprising: said second proxy server located at saiddata center, wherein said second proxy server comprises: a memory unitfor storing a computer program for synchronizing cache data among branchproxy servers; and a processor coupled to said memory unit, wherein saidprocessor, responsive to said computer program, comprises circuitry forreceiving said cache entry from said first proxy server; and circuitryfor storing said cache entry in said cache.
 17. The system as recited inclaim 16, wherein said processor of said second proxy server furthercomprises: circuitry for informing said first proxy server to purge saidcache entry in response to said resource at said cache entry being oneof invalid and expired.
 18. The system as recited in claim 16, whereinsaid processor of said second proxy server further comprises: circuitryfor informing one or more proxy servers at one or more branch offices topurge a cache entry storing said resource in response to said resourceat said cache entry being one of invalid and expired.